package cn.echase.ecare.yinfayun.controller.access;

import cn.echase.common.core.exception.EchaseException;
import cn.echase.common.result.aop.EchaseResponseResult;
import cn.echase.ecare.yinfayun.domain.dto.AssessBaseResDto;
import cn.echase.ecare.yinfayun.domain.dto.AssessInfoDto;
import cn.echase.ecare.yinfayun.domain.vo.AssessInfoVo;
import cn.echase.ecare.yinfayun.service.IAssessInfoService;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import jodd.util.StringUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 评估信息管理
 *
 * @author lidisong
 * @date 2024-11-12
 */
@RestController
@RequiredArgsConstructor
@RequestMapping(value = { "/info"})
public class AssessInfoController {

    private final IAssessInfoService assessInfoService;

    /**
     * 评估列表导出（新）
     */
    @PostMapping("/export/list")
    public JSONObject infoListExport(@RequestBody AssessInfoDto assessInfoDto) {
        if (StrUtil.isBlank(assessInfoDto.getOrgId())){
            assessInfoDto.setOrgId(LoginHelper.getOrgId());
        }
        if (ObjUtil.isNull(assessInfoDto.getDeptId())){
            assessInfoDto.setDeptId(LoginHelper.getDeptId());
        }
        return assessInfoService.infoListExport(assessInfoDto);
    }

    /**
     * 查询assess列表（新）
     */
    @EchaseResponseResult
    @PostMapping("/list")
    public TableDataInfo<AssessInfoVo> listPc(@RequestBody AssessInfoDto assessInfoDto) {
        String orgId = LoginHelper.getOrgId();
        if (StringUtil.isEmpty(assessInfoDto.getOrgId())) {
            assessInfoDto.setOrgId(orgId);
        }
        if (StringUtil.isEmpty(assessInfoDto.getTenantId())) {
            assessInfoDto.setTenantId(orgId);
        }
        return assessInfoService.infoListRefactor(assessInfoDto);
    }

    /**
     * 根据AssessNo获取assess详细信息（新）
     */
    @EchaseResponseResult
    @PostMapping(value = "/getByAssessNo")
    public AssessInfoVo getByAssessNo(@RequestBody AssessInfoDto assessInfoDto) {
        String orgId = LoginHelper.getOrgId();
        if (StringUtil.isEmpty(assessInfoDto.getOrgId())) {
            assessInfoDto.setOrgId(orgId);
        }
        if (StringUtil.isEmpty(assessInfoDto.getTenantId())) {
            assessInfoDto.setTenantId(orgId);
        }
        return assessInfoService.queryByAssessNo(assessInfoDto);
    }

    /**
     * 获取机构历史评估地点（新）
     */
    @EchaseResponseResult
    @PostMapping("/getHistoryAssessAddressList")
    public List<String> getHistoryAssessAddressList(@RequestBody AssessInfoDto assessInfoDto) {
        if (StringUtil.isEmpty(assessInfoDto.getOrgId())) {
            String orgId = LoginHelper.getOrgId();
            assessInfoDto.setOrgId(orgId);
        }
        if (StringUtil.isEmpty(assessInfoDto.getOrgId())) {
            throw new EchaseException("机构id不能为空");
        }
        return assessInfoService.getHistoryAssessAddressList(assessInfoDto.getOrgId());
    }

    /**
     * 确认评估 更新评估结果（新）
     */
    @EchaseResponseResult
    @PostMapping("/result")
    public AssessBaseResDto result(@RequestBody AssessInfoDto assessInfoDto) {
        return assessInfoService.updateResult(assessInfoDto);
    }

    /**
     * 删除评估信息（新）
     */
    @EchaseResponseResult
    @PostMapping("/delete")
    public Boolean delete(@RequestBody AssessInfoDto assessInfoDto) {
        return assessInfoService.delete(assessInfoDto.getAssessNo());
    }

    /**
     * 开始评估插入基本信息（新）
     */
    @EchaseResponseResult
    @PostMapping("/add")
    public AssessBaseResDto add(@RequestBody AssessInfoDto assessInfoDto) {
        String orgId = LoginHelper.getOrgId();
        if (StringUtil.isEmpty(assessInfoDto.getOrgId())) {
            assessInfoDto.setOrgId(orgId);
        }
        if (StringUtil.isEmpty(assessInfoDto.getTenantId())) {
            assessInfoDto.setTenantId(orgId);
        }
        return assessInfoService.add(assessInfoDto);
    }

    /**
     * 根据长者id查询未完成评估信息（新）
     */
    @EchaseResponseResult
    @PostMapping("/unCompleteAssess")
    public AssessInfoVo unCompleteAssess(@RequestBody AssessInfoDto assessInfoDto) {
        return assessInfoService.unCompleteAssess(assessInfoDto);
    }

}
